const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');

try {
  // 创建发布目录
  const distPath = path.join(__dirname, '..', 'dist');
  if (!fs.existsSync(distPath)) {
    fs.mkdirSync(distPath);
  }

  // 执行 pkg 打包
  console.log('正在打包应用...');
  execSync('pkg . --compress GZip --public --public-packages "*" --debug', {
    stdio: 'inherit',
    env: { ...process.env, NODE_ENV: 'production' }
  });

  // 复制必要文件
  console.log('正在复制文件...');

  // 复制并重命名可执行文件
  const exeFiles = {
    'lan-chat-win.exe': 'lan-chat-win.exe',
    'lan-chat-linux': 'lan-chat-linux',
    'lan-chat-macos': 'lan-chat-macos'
  };

  Object.entries(exeFiles).forEach(([src, dest]) => {
    const sourcePath = path.join(distPath, src);
    if (fs.existsSync(sourcePath)) {
      fs.renameSync(
        sourcePath,
        path.join(distPath, dest)
      );
    }
  });

  // 复制启动脚本
  ['start.bat', 'start.sh'].forEach(file => {
    const sourcePath = path.join(__dirname, '..', file);
    if (fs.existsSync(sourcePath)) {
      fs.copyFileSync(
        sourcePath,
        path.join(distPath, file)
      );
      // 为 start.sh 添加执行权限
      if (file === 'start.sh' && process.platform !== 'win32') {
        fs.chmodSync(path.join(distPath, file), '755');
      }
    }
  });

  // 创建数据目录
  const dataDir = path.join(distPath, 'data');
  const uploadsDir = path.join(dataDir, 'uploads');
  if (!fs.existsSync(dataDir)) {
    fs.mkdirSync(dataDir);
  }
  if (!fs.existsSync(uploadsDir)) {
    fs.mkdirSync(uploadsDir);
  }

  // 创建 README
  const readmeContent = `
# 局域网聊天室使用说明

## Windows 用户
1. 双击 start.bat 启动程序
2. 浏览器会自动打开 http://localhost:3000
3. 其他用户可以通过 http://<你的IP>:3000 访问

## Linux/Mac 用户
1. 打开终端，进入程序目录
2. 执行命令：chmod +x start.sh
3. 执行命令：./start.sh
4. 浏览器会自动打开 http://localhost:3000

注意事项：
- 首次运行可能会提示防火墙设置，请允许访问
- 文件保存在 data 目录下
- 请勿删除 data 目录
- 默认端口为 3000，如需修改，请编辑启动脚本
`;

  fs.writeFileSync(
    path.join(distPath, 'README.txt'),
    readmeContent,
    'utf8'
  );

  console.log('正在复制静态文件...');
  const publicDir = path.join(distPath, 'public');
  if (!fs.existsSync(publicDir)) {
    fs.mkdirSync(publicDir);
  }

  const jsDir = path.join(publicDir, 'js');
  if (!fs.existsSync(jsDir)) {
    fs.mkdirSync(jsDir, { recursive: true });
  }

  const utilsDir = path.join(jsDir, 'utils');
  if (!fs.existsSync(utilsDir)) {
    fs.mkdirSync(utilsDir, { recursive: true });
  }

  // 复制静态文件
  const staticFiles = [
    'index.html',
    'style.css',
    'js/ChatApp.js',
    'js/ConnectionManager.js',
    'js/DOMManager.js',
    'js/FileHandler.js',
    'js/MessageHandler.js',
    'js/main.js',
    'js/utils/helpers.js'
  ];
  staticFiles.forEach(file => {
    fs.copyFileSync(
      path.join(__dirname, '..', 'public', file),
      path.join(publicDir, file)
    );
  });

  console.log('打包完成！发布文件在 dist 目录下');
} catch (error) {
  console.error('打包过程出错：', error);
  process.exit(1);
} 